package com.xxdemo.quickstart;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Optional;

@Mapper
public interface CustomerMapper {
    Optional<Customer> findById(Long id);

    /**
     * 查询顾客列表 findCustomersByNameContains(姓名匹配, 按什么排序, 是否降序排列, 最多条数)
     *
     * @param customerName 搜索字符串
     * @param sortByColumn 查询SQL时指定按`id`排序或按其他字段名排序
     * @param orderIsDesc true为递减排序; 否则默认递增
     * @param topN 最多前N条数据, 排序方式默认按客户id从小到大(ORDER BY id)
     * @return 查询结果(若找不到匹配项, 则可返回空列表)
     */
    List<Customer> findCustomersByNameContains(
            @Param("name") String customerName,
            @Param("sortByColumn") String sortByColumn,
            @Param("orderIsDesc") boolean orderIsDesc,
            @Param("topN") int topN);

    /**
     * 搜索
     *
     * @param idMin 起始ID值
     * @param idMax 末尾ID值
     * @param topN 最多前N条数据
     * @return 查询结果(若找不到匹配项, 则可返回空列表)
     */
    List<Customer> findByIdRangeInclusive(
            @Param("idMin") Long idMin,
            @Param("idMax") Long idMax,
            @Param("topN") int topN);

    /**
     * 搜索
     *
     * @param prevCustomerId 前一页末尾的客户ID值
     * @param topN 最多前N条数据
     * @return 查询结果(若找不到匹配项, 则可返回空列表)
     */
    List<Customer> findCustomersWithCustomerIdGreaterThan(
            @Param("prevCustomerId") Long prevCustomerId,
            @Param("topN") int topN);
}
